Amazon SES の DKIM認証 に失敗したときに切り分けとして行うこと
コンバンハ、千葉(幸)です。
Amazon SES においては、Identityという概念があります。送信に用いるメールアドレスか、ドメイン全体のことを指します。それぞれのIdentityにおいて、DKIM認証を有効化することができます。
今回その認証でちょっとつまずいた部分があったため、備忘として記します。
目次
- 目次
- Amazon SES の Identity
- DKIM認証とは
- Domain Identity におけるEasy DKIM認証の有効化
- DKIM認証の有効化がうまくいかないときの切り分け
- 終わりに
Amazon SES の Identity
冒頭の繰り返しになりますが、Amazon SES の Identityには以下の2種類があります。
- Eメールアドレス
- ドメイン
ここでいずれかのIdentityの検証(Verify)が済めば、それを使用してAmazon SESによるメールの送信が可能になります。
メールアドレス単位での検証であれば特定のメールアドレスでのみ送信が可能になりますし、ドメイン単位で検証すればそのドメインに所属する任意のメールアドレスを用いて送信が可能になります。
検証にはIdentityを所有していることの確認が必要なため、それぞれ以下のようなステップを踏む必要があります。
- Eメールアドレスの検証:
- 指定したメールアドレス宛にメールが届くため、本文内のリンクを押下する
- ドメインの検証:
- 検証用に生成されたTXTレコードをDNSに登録する
詳細は以下を確認してください。
DKIM認証とは
上記で検証したIdentityに対して、DKIM認証を有効化することができます。DKIM認証とは、DomainKeys Identified Mail と呼ばれる規格の電子署名を用いて、メールのなりすましや改竄が行われていないかを確認するためのプロセスです。
以下のサイトで他の認証方式も含めてわかりやすくまとめられています。
また、DKIM認証実施後に送信されたメールが、受信側で見たときにどのように変化するかは、以下のサイトがわかりやすかったです。
amazonses.com経由
という表記が消える- 署名元が
amazonses.com
からIdentityのドメインに変わる
Domain Identity におけるEasy DKIM認証の有効化
Amason SESにより送信するメールにDKIM認証を有効化する際の作業を考えてみます。
いくつか手法がありますが、今回は Easy DKIM のパターンを取り上げます。
- Easy DKIM(SESにより送信するEメールに自動的に署名を追加)
- BYODKIM(署名に用いるキーペアを持ち込むパターン)
- 手動でのDKIM認証
Amazon SES における DKIM を使った E メールの認証
なお、DKIM認証の有効化はドメイン、サブドメイン、Eメールアドレスそれぞれの単位で実施することができますが、以下のように細かい単位で行った設定が優先されます。
親ドメイン、サブドメインおよび E メールアドレスに対して Easy DKIM をセットアップした場合、Amazon SES は以下の方法で Easy DKIM 設定を適用します。
・ サブドメインの DKIM 設定は、親ドメインの設定を上書きします。 ・ E メールアドレスの DKIM 設定の設定は、サブドメインの設定 (適用される場合) と親ドメインの設定を上書きします。
Easy DKIMのセットアップは、生成されたキーの組み合わせをCNAMEレコードとして登録することで実現します。メール送受信の流れは以下のイメージです。
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)より
SESのIdentityの画面から、CNAMEレコードが発行できます。これらをドメインを管理しているDNSプロバイダーにレコード登録することでDKIM認証が有効になります。
レコードのイメージは以下です。ここではmail.example.com
のドメインでDKIM認証を有効化することを想定しています。
Name | Type | Value |
---|---|---|
aaaaaaaaaa._domainkey.mail.example.com | CNAME | aaaaaaaaaa.dkim.amazonses.com |
bbbbbbbbbb._domainkey.mail.example.com | CNAME | bbbbbbbbbb.dkim.amazonses.com |
cccccccccc._domainkey.mail.example.com | CNAME | cccccccccc.dkim.amazonses.com |
DKIM認証を有効化したいIdentityと同一のAWSアカウントにRoute 53があり、そのホストゾーンでドメインが管理されている場合、[Use Route 53 (Route 53 を使用)] を選択することで自動的に登録されます。それ以外の場合は、各種DNS プロバイダーに適宜レコードを登録する必要があります。
DKIM認証の有効化がうまくいかないときの切り分け
今回の私のケースでは、SESのIdentityとは別AWSアカウントに存在するRoute53 のホストゾーンにレコードを登録する必要があったため、手動でのレコード登録が必要でした。
Name | Type | Value |
---|---|---|
aaaaaaaaaa._domainkey.mail.example.com | CNAME | aaaaaaaaaa.dkim.amazonses.com |
bbbbbbbbbb._domainkey.mail.example.com | CNAME | bbbbbbbbbb.dkim.amazonses.com |
cccccccccc._domainkey.mail.example.com | CNAME | cccccccccc.dkim.amazonses.com |
きちんとレコード登録したように見受けられたのですが、DKIM Verification Status が failure になってしまいました。
そこで切り分けとして実施したのが、「3つすべて」「パブリックにレコードを引けるかどうか」の確認です。
上記のレコードをきちんと登録できていれば、それぞれDNSサーバへのクエリに対して応答が返ってくるはずです、
具体的には、レコードごとに以下のコマンドを実施しました。
$ dig +noall +ans aaaaaaaaaa._domainkey.mail.example.com
正しく登録されていれば、以下のように結果が返ってきます。
$ dig +noall +ans aaaaaaaaaa._domainkey.mail.example.com aaaaaaaaaa._domainkey.mail.example.com. 300 IN CNAME aaaaaaaaaa.dkim.amazonses.com.
(+noall +ans
というオプションは必要な表示のみに絞るためのオプションのため、省略しても問題ありません。)
切り分けを行った結果、一つのレコードで応答が返ってこず、一部の値を誤って登録していることが発覚しました。レコードの登録内容を修正し再度Verifyすることで、verifiedステータスに遷移しました。
今回は登録誤りという単純な原因であったため、速やかに事象が解決しました。
終わりに
目検での確認においては登録誤りを見落としていたため、別のアプローチで確認を取るのは大事だと痛感しました。もし検証に失敗したケースがあった場合に参考になれば幸いです。
その他のトラブルシューティングについては以下をご参照ください。
Amazon SES の DKIM 問題のトラブルシューティング
以上、千葉(千葉)でした。